package com.yckj.ytracker.api.trace;

import com.yckj.ytracker.api.enums.TrackerStatus;

import java.util.Map;

/**
 * @author liuwei
 * @version 2017/10/14 下午2:02
 * @description 调用链接口
 * @see
 * @since 1.0
 */
public interface ITracerClient {

    /**
     * 开启一个新的根节点
     *
     * @param methodName  方法名
     * @param clusterName 集群名
     * @param param       参数(json格式)
     */
    void startSpan(String methodName, String clusterName, String param);

    /**
     * 完成当前节点调用链记录
     *
     * @param trackerStatus 当前节点执行状态
     */
    void offSpan(TrackerStatus trackerStatus);

    /**
     * 完成当前节点调用链记录
     *
     * @param trackerStatus 当前节点执行状态
     * @param throwable     异常信息
     */
    void offSpan(TrackerStatus trackerStatus, Throwable throwable);

    /**
     * 设置自定义业务跟踪数据
     *
     * @param attributes 自定义数据
     */
    void setAttributes(Map<String, String> attributes);

    /**
     * 结束本次调用链
     */
    void close();

    String getTrackerData();
}
